﻿using UnityEngine;
using UnityEngine.UI;
using System.Collections;

namespace TowerDefence
{
    public class AudioManager : MonoBehaviour
    {
        #region Singleton

        // AudioManager的单例实例
        public static AudioManager instance;

        // Awake方法在对象被创建时调用
        private void Awake()
        {
            // 如果已经存在一个AudioManager实例，则输出错误信息并返回
            if (instance != null)
            {
                Debug.LogError("场景中存在多个 AudioManager 实例！");
                return;
            }

            // 否则，将当前实例设置为唯一实例
            instance = this;
        }

        #endregion

        [Header("音乐音频")]
        // 音乐音频源
        public AudioSource musicAudio;
        // 音乐音频的音量滚动条
        public Scrollbar musicBar;
        // 音乐音频的音量填充图像
        public Image musicFill;
        // 音乐开关图标（开启状态）
        public GameObject musicOn;
        // 音乐开关图标（关闭状态）
        public GameObject musicOff;
        // 记录音乐是否开启的布尔值
        bool musicTurnOn;

        [Space]
        [Header("音效音频")]
        // 音效音频的音量滚动条
        public Scrollbar soundBar;
        // 音效音频的音量填充图像
        public Image soundFill;
        // 音效开关图标（开启状态）
        public GameObject soundOn;
        // 音效开关图标（关闭状态）
        public GameObject soundOff;
        // 记录音效是否开启的布尔值
        bool soundTurnOn;

        [Space]
        [Header("塔建造和出售音频")]
        // 建造音频源
        public AudioSource buildAudio;
        // 出售音频源
        public AudioSource sellAudio;

        // Start方法在对象被启用时调用
        private void Start()
        {
            // 设置音效和音乐滚动条的初始值为玩家数据中保存的值
            soundBar.value = PlayerDataManager.SoundValue;
            musicBar.value = PlayerDataManager.MusicValue;
        }

        // Update方法在每一帧都会被调用
        void Update()
        {
            // 更新玩家数据中的音效和音乐值
            PlayerDataManager.SoundValue = soundBar.value;
            PlayerDataManager.MusicValue = musicBar.value;

            // 处理音频相关操作
            AudioHandler();

            // 设置建造和出售音频的音量
            buildAudio.volume = soundBar.value;
            sellAudio.volume = soundBar.value;
        }

        // 处理音频相关操作的私有方法
        private void AudioHandler()
        {
            // 限制音效滚动条的值在0到0.8之间
            soundBar.value = Mathf.Clamp(soundBar.value, 0, 0.8f);
            // 设置音效填充图像的填充量
            soundFill.fillAmount = soundBar.value;

            // 根据音效的填充量判断音效开关的状态
            if (soundFill.fillAmount > 0)
            {
                soundOn.SetActive(true);
                soundOff.SetActive(false);
            }
            else
            {
                soundOn.SetActive(false);
                soundOff.SetActive(true);
            }

            // 限制音乐滚动条的值在0到0.8之间
            musicBar.value = Mathf.Clamp(musicBar.value, 0, 0.8f);
            // 设置音乐填充图像的填充量
            musicFill.fillAmount = musicBar.value;
            // 设置音乐音频的音量
            musicAudio.volume = musicFill.fillAmount;

            // 根据音乐的填充量判断音乐开关的状态
            if (musicFill.fillAmount > 0)
            {
                musicOn.SetActive(true);
                musicOff.SetActive(false);
            }
            else
            {
                musicOn.SetActive(false);
                musicOff.SetActive(true);
            }
        }

        public void ToggleGameSound()
        {
            // 切换音效开关状态
            soundTurnOn = !soundTurnOn;

            // 如果音量条大于0，则强制关闭音效
            if (soundBar.value > 0)
                soundTurnOn = false;
            else
                soundTurnOn = true;

            // 根据音效开关状态设置相应的界面和音量
            if (soundTurnOn)
            {
                soundOn.SetActive(true);
                soundOff.SetActive(false);
                soundBar.value = 100;
            }
            else
            {
                soundOff.SetActive(true);
                soundOn.SetActive(false);
                soundBar.value = 0;
            }
        }

        public void ToggleGameMusic()
        {
            // 切换音乐开关状态
            musicTurnOn = !musicTurnOn;

            // 如果音量条大于0，则强制关闭音乐
            if (musicBar.value > 0)
                musicTurnOn = false;
            else
                musicTurnOn = true;

            // 根据音乐开关状态设置相应的界面、音量和音频组件的音量
            if (musicTurnOn)
            {
                musicOn.SetActive(true);
                musicOff.SetActive(false);
                musicBar.value = 100;
                musicAudio.volume = 1.0f; // 100% 音量
            }
            else
            {
                musicOff.SetActive(true);
                musicOn.SetActive(false);
                musicBar.value = 0;
                musicAudio.volume = 0.0f; // 静音
            }
        }

    }
}
